/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-通用能力封装层-公共组件
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.utility.exception;

import com.taipingframework.utility.web.IApiStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.NonNull;

/**
 * 自定义业务逻辑异常类，主要用于业务逻辑层和Manager层
 * <p>
 * 为避免 因 运行时方法入参或者间接方法入参 在数据层面 违反业务逻辑导致脏数据入库 而 主动抛出的异常，以阻止业务逻辑编码继续向下执行。
 * <p>
 * 在主动抛出这个异常时，必须详细说明导致业务逻辑异常的原因：①业务逻辑code，②业务逻辑name，③违反业务逻辑的程序参数(参数名)和对应的运行时数据(参数的常量值)。
 * 否则，就把程序员拖出去打死吧。
 */
@Slf4j
public final class SystemInterrupterException extends IllegalArgumentException {

    public SystemInterrupterException(@NonNull IApiStatus status) {
        super(toJson(status));
    }

    static String toJson(IApiStatus status) {
        try {
            return status.toJSON();
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
            return status.getMessage();
        }
    }

}
